home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1998 July / EnigmA AMIGA RUN 29 (1998)(G.R. Edizioni)(IT)[!][issue 1998-07 & 08].iso / earcd / phase5 / lha-ppc / src / larc.c < prev    next >
C/C++ Source or Header  |  1997-12-04  |  1KB  |  69 lines

  1. /***********************************************************
  2.     larc.c -- extract *.lzs
  3. ***********************************************************/
  4. #include <stdio.h>
  5. #include "slidehuf.h"
  6.  
  7. #define MAGIC0 18
  8. #define MAGIC5 19
  9.  
  10. static int flag, flagcnt, matchpos;
  11.  
  12. unsigned short decode_c_lzs(void)
  13. {
  14.     if (getbits(1)) {
  15.         return getbits(8);
  16.     } else {
  17.         matchpos = getbits(11);
  18.         return (unsigned short)(getbits(4) + 0x100);
  19.     }
  20. }
  21.  
  22. unsigned short decode_p_lzs(void)
  23. {
  24.     return (unsigned short)((loc - matchpos - MAGIC0) & 0x7ff);
  25. }
  26.  
  27. void decode_start_lzs(void)
  28. {
  29.     init_getbits();
  30. }
  31.  
  32. unsigned short decode_c_lz5(void)
  33. {
  34.     unsigned short c;
  35.  
  36.     if (flagcnt == 0) {
  37.         flagcnt = 8;
  38.         flag = getc(infile);
  39.     }
  40.     flagcnt--;
  41.     c = getc(infile);
  42.     if ((flag & 1) == 0) {
  43.         matchpos = c;
  44.         c = getc(infile);
  45.         matchpos += (c & 0xf0) << 4;
  46.         c &= 0x0f;
  47.         c += 0x100;
  48.     }
  49.     flag >>= 1;
  50.     return c;
  51. }
  52.  
  53. unsigned short decode_p_lz5(void)
  54. {
  55.     return (unsigned short)((loc - matchpos - MAGIC5) & 0xfff);
  56. }
  57.  
  58. void decode_start_lz5(void)
  59. {
  60.     int i;
  61.  
  62.     flagcnt = 0;
  63.     for (i = 0; i < 256; i++) memset(&text[i * 13 + 18], i, 13);
  64.     for (i = 0; i < 256; i++) text[256 * 13 + 18 + i] = i;
  65.     for (i = 0; i < 256; i++) text[256 * 13 + 256 + 18 + i] = 255 - i;
  66.     memset(&text[256 * 13 + 512 + 18], 0, 128);
  67.     memset(&text[256 * 13 + 512 + 128 + 18], ' ', 128 - 18);
  68. }
  69.